package income

import (
	"github.com/gofiber/fiber/v2"
	"sg-backend/global"
	"sg-backend/model/paylog"
	"time"
)

/*
 * method  GET
 * path    /api/incomeLog
 */

// 处理回传前端的数据结构
type _IncomeDataJson struct {
	Id         uint       `json:"id"`
	IncomeType any        `json:"incomeType"`
	Money      float64    `json:"money"`
	Time       *time.Time `json:"time"`
	Date       string     `json:"date"`
	Remark     string     `json:"remark"`
}

// GetIncomeLog GET请求，获取数据
func GetIncomeLog(ctx *fiber.Ctx) error {

	// 计算分页，mysql第一页为0计算
	pageSize := ctx.QueryInt("pageSize", 10)
	current := ctx.QueryInt("current", 1)
	offSet := (current - 1) * pageSize

	// 总数
	var total int64

	// 指定数据model
	var incomeLogs []paylog.IncomeLog

	// 匹配全部数据，计算总数
	r := global.DB.Preload("IncomeType").Where("user_id = ?", global.AuthUser.UserId).
		Model(&paylog.IncomeLog{}).Count(&total)
	if r.Error != nil {
		return ctx.JSON(fiber.Map{
			"status":  "error",
			"message": "数据库查询出错！" + r.Error.Error(),
		})
	}
	if r.Error != nil {
		return ctx.JSON(fiber.Map{
			"status":  "error",
			"message": "数据库查询出错！" + r.Error.Error(),
		})
	}

	// 2，分页处理
	if err := r.Order("time desc").Offset(offSet).Limit(pageSize).Find(&incomeLogs); err.Error != nil {
		return ctx.JSON(fiber.Map{
			"status":  "error",
			"message": "数据分页出错！" + err.Error.Error(),
		})
	}

	// 3，对查询到的数据进行处理，将同日期的删除
	var checkDate = ""
	var data []_IncomeDataJson
	for _, v := range incomeLogs {

		// 日期检测
		_date := v.Time.Format("2006-01-02")
		if checkDate == _date {
			_date = ""
		} else {

			// 日期不相等，是新的一天
			checkDate = v.Time.Format("2006-01-02")
		}
		data = append(data, _IncomeDataJson{
			Id:         v.Id,
			IncomeType: v.IncomeType,
			Money:      v.Money,
			Time:       v.Time,
			Date:       _date,
			Remark:     v.Remark,
		})
	}

	// 查询结束返回结果
	return ctx.JSON(fiber.Map{
		"status":   "done",
		"success":  true,
		"message":  "请求成功！",
		"data":     data,
		"total":    total,
		"current":  current,
		"pageSize": pageSize,
	})
}
